const http = {
	// baseUrl 地址
	baseUrl: 'https://dscc.suishilian.com',
	defaultConfig: {
		loading: false,
		auth: false,
		header: {
			'Content-Type': 'application/json'
		}
	},
	// 请求方法
	request(config) {
		// config：请求配置对象，具体参照uniapp文档
		config = beforeRequest(config)
		// 请求地址拼接
		config.url = this.baseUrl + config.url
		// 异步请求
		return new Promise((resolve, reject) => {
			uni.request(config).then(res => {
				// 响应拦截
				const response = beforeResponse(res, config)
				resolve(response?.data)
			}).catch(err => {
				errorHandle(err)
				reject(err)
			})
		})

	},
	get(url, data, config = this.defaultConfig) {
		return this.request({
			url: url,
			data: data,
			method: 'GET',
			...config
		})
	},
	post(url, data, config) {
		return this.request({
			url: url,
			data: data,
			method: 'POST',
			...config
		})
	},
	put(url, data, config = this.defaultConfig) {
		return this.request({
			url: url,
			data: data,
			timeout: 10000,
			method: 'PUT',
			...config
		})
	},
	delete(url, data, config = this.defaultConfig) {

		return this.request({
			url: url,
			data: data,
			method: 'DELETE',
			...config
		})
	}
}

// 请求拦截器
const beforeRequest = (config) => {
	// 请求之前拦截操作
	console.log('请求拦截器', config)
	if (config.loading) {
		uni.showLoading({
			title: config?.loading?.text || '加载中...',
			mask: true,
		})
	}
	if (config?.auth && config?.auth != undefined) {
		// 请求头中添加token
		if (!uni.getStorageSync('token')) {
			uni.navigateTo({
				url: '/pages/index/index'
			})

		}
	}
	return config
}

// 响应拦截器
const beforeResponse = (response) => {
	// 请求之后操作
	console.log('响应拦截器', response)
	uni.hideLoading();
	// 判断请求返回的状态码
	if (response.data.code !== 0) {
		// 给出对应的提示
		if (response.data.msg) {
			// uni.showToast({
			// 	title: response.data.msg.toString(),
			// 	icon: 'none',
			// 	duration: 2000
			// })
		}
	}
	return response
}

// 请求异常处理器
const errorHandle = ((err) => {
	console.log('请求异常', err)
})

export default http